﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;
using System.Diagnostics;
using Microsoft.Xna.Framework.Input;

namespace StarControl
{
    //**  Nave de defesa - Poder especial > invisibilidade **//
    public class MileniumFalconShip : Nave
    {
        //private Texture2D imagem;
        private bool invisivel;
		private Escudo _escudo;
    
        public MileniumFalconShip(Game game, int jogador)
            : base(game)
        {
            this.setJogador(jogador);
            Initialize();
        }

        public override void Initialize()
        {
            base.Initialize();
            invisivel = false;
            posicaoInicialNaves(this.getJogador());
            setImagem(carregarImagem("Textures/naves/Millenium"));
            setImagemHidden(carregarImagem("Textures/red"));
            setImagemEscudoBasico(carregarImagem("imagens/escudo_basico1"));
            this.CriarNave(3, 1, getPosition(), getImagem(), 300.0f, 150.0f, this.getJogador(), 5);
            ativarEscudoBasico();

            // Instancia o escudo da nave defensiva
            setEscudo(new Escudo(getGame(), this, getPosition(),
               TipoEscudo.Tipo.Habilidade, TipoEscudo.Habilidade.Invisibilidade));
        }


        // Usado para deixar a nave invisivel, alterando entre duas texturas carregadas
        public void deixarInvisivel()
        {
            if (invisivel)
                invisivel = false;
            else
                invisivel = true;
        }

      public override void Draw(GameTime gameTime)
        {
            base.Draw(gameTime);

            this.barraEnergia.Draw(gameTime, getBatch());
            if (!invisivel)
            {
                getBatch().Begin();
                    setPosition(getPosition());
                    Texture2D _img = getImagem();
                    getBatch().Draw(_img, getPosition(), null, Color.White,
                        (float)Math.Atan2(direcao.Y, direcao.X), new Vector2(_img.Width / 2, _img.Height / 2),
                        1.0f, SpriteEffects.None, 0.0f);
                getBatch().End();

                Escudo _escudoBasico = getEscudoBasico();

                // Garante que este escudo foi instanciado
                if (_escudoBasico != null)
                {
                    /* escudo básico */
                    getEscudoBasico().Update(gameTime);
                    getEscudoBasico().Draw(gameTime);
                }
            }
            else
            {
                if (_escudo != null)
                {
                    /* Desenha se houver escudo */
                    _escudo.Update(gameTime);
                    _escudo.Draw(gameTime);
                }

                if (!_escudo.getSituacao())
                {
                    _escudo.Dispose();
                    _escudo = null;

                    deixarInvisivel(); // Desativa a invisibilidade
                }    
            }
        }

         public override void poderEspecial()
        {
            if (_escudo == null)
            {
                _escudo = getEscudo();
                _escudo.ativarEscudo();
                deixarInvisivel();
            }
        }

        public override void acionaArmaPrimaria()
        {
            ArmaPrimaria arma1 = new ArmaPrimaria(Game, 1, this, 1);
            arma1.setBatch(getBatch());
            getGame().Components.Add(arma1);
        }

        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            // Alterar a tecla usada para ativar o escudo
            if (Keyboard.GetState().IsKeyDown(getBotaoEspecial()))
            {
                poderEspecial();
            }

            //Arma Primaria
            if (Keyboard.GetState().IsKeyDown(getBotaoTiro()) && !apertouTiro)
            {
                acionaArmaPrimaria();
                apertouTiro = true;
            }
            if (Keyboard.GetState().IsKeyUp(getBotaoTiro()))
            {
                apertouTiro = false;
            }
        }
        }

    }

